約 5,055,231 件
https://w.atwiki.jp/codepake/pages/16.html
PSP版 改造コード
https://w.atwiki.jp/ogrebinary/pages/14.html
必要なもの タクティクスオウガ 運命の輪のISOファイル→UMDから吸い出してください BNE2本体 BNE2用運命の輪設定ファイル UMDGen 弄るまでの手順 1.UMDGenを起動し「Open」アイコンから運命の輪のISOファイルを開く 参考画像 2.PSP_GAME→USRDIR→03E8.BINを右クリック、Extract...で適当なフォルダにコピーする(BNE2のあるフォルダにコピーするのがオススメ) 参考画像 3.UMDGenを閉じてBNE2フォルダを開き、設定ファイルをSettings以下にぶちこむ 4.BNE2.exeを起動し、上のその他→設定から「PSP_TacticsOgre」を設定する 参考画像 5.上のファイル→開くで先ほどの03E8.BINを開く 参考画像 6.自分好みに編集する(詳しいことは過去スレなどを見て調べよう 『タクティクスオウガ 運命の輪 改造スレ』でググれば過去ログが読める 参考画像 7.保存する(名前を付けてでも上書きでもどちらでもOK、元ファイルは.bakで保存されているので上書きでも問題なし 8.またUMDGenでISOを開き、USRDIRフォルダを開いて編集した03E8.BINをドラッグしてぶち込む(上書きでOK) 参考画像 9.上のところから「Save」アイコンをクリックして名前を付けて保存(上書き保存はできません、ファイルの頭にBNE2などを付けて区別しよう) 10.この新しいisoファイルをPSPにぶち込んで起動すれば編集された運命の輪がプレイできます なお、2回目以降も素の運命の輪のISOに03E8をぶち込んで名前を付けて保存してください(名前はBNE2...とつけたものと一緒でいいです UMDGenでは編集したものを上書きするとミスが起こってしまうので おまけ ISOファイルから起動することになるのでデータインストール用のファイルが無駄になります INSDIRフォルダ以下にあるDATA.BINがそれにあたるので何度も編集して移動する場合は削除してしまいましょう 素の運命の輪のISOファイルからこれを削除した.isoを作成し、それを元にして03E8を編集するといいでしょう
https://w.atwiki.jp/ps3save/
PS3での悲しい現状の仕様「移動不可」について纏めたwikiです 勘違いされると困るのですが 一部のセーブデータだけセーブデータが現状どうしても移動出来ない物が有ると言う事です。 一応移動可能になったようです。 3.15のファームフェアでPS3同士をLANケーブルで接続して現在使っているPS3で「Data Transfer Utility」のソフトを起動して転送する方法となります。 との事・・・・2台ないと移動出来んってどういう仕様なんだよコレ。 やっぱ駄目仕様やん。 リストは左の「 移動不可移動可リスト 」からどうぞ 編集も可能なので理不尽なこの仕様撲滅にご協力を。 何でも某掲示板の方でSAVE不可関連に多少書き込みするとアクセス禁止がもらえると幾つか報告が 不具合関係のスレが伸びにくい正体はここに有るのかも知れないです。 2ch等で誰か編集して下さいと言う前に学習する程も無く簡単な物なのですから編集する術を知り編集しましょう。 他のWIKIより明記も少なく工程も異常に少ない構成となっているのでなお更です。 「誰か編集して下さい」と言う前に一度「 [[WIKIの編集の仕方]] 」をごらんになって下さい。 思っている簡単ですのでweb巡回出来る能力が有れば十分可能なはずです。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (data01.jpg) 移動不可セーブデータ 同じPS3にはリストアできる 他のPS3にはリストアできない セーブデータには3種類あります。 1 アカウントや本体など何も縛られるものがない完全なコピーフリー 2 アカウントさえ同じであれば別の本体でも使用できるもの 3 アカウントと本体(基盤)に紐付けされているため特定の故障や買換の際の復旧手段がないもの(二台のPS3を用意する事でムーブできるようになりました) 問題は3で現在ユーザーの力では基板と供に消滅するしか無い ソニサポ http //www.jp.playstation.com/support/contact/madoguchi.html#mail メールフォーム直結 https //www.jp.playstation.com/support/formSF/jp/form.cgi?UniqID=4ae5e84379cf7 デザインを軽く変更。 多分小さめのモニターでも見れるとは思う。 多分見やすくなっているはず(しているつもり)
https://w.atwiki.jp/wiki3_sai/pages/209.html
ペン入れツールのしくみ ペン入れツールを効率的に使う さて今回はペン入れツールを使ってみようと思います。ペン入れツールとは描画をベクトルで制御する機能、と言えば良いでしょうか。 ……うん、言葉ではうまく説明できないので画像をいっぱい使って説明しようと思います。 ペン入れツールのしくみ それではここで、ペン入れツールの説明をするために、3.基本操作編でちょこっと顔を見せたSAIの妖精さんに登場してもらいましょう。 この妖精さんを下書きとして使ってペン入れに挑戦してみたいと思います。正直また使うことになるとは思ってもみませんでした。この画像を使いたい人は、画像を右クリックして適当に保存し、起動したSAIにドラッグ&ドロップするとかCtrl + Oなりで開いて下さい。 こんなマヌケづらは嫌だという人は自分で適当に下書き用画像を用意して下さい。 下書き用画像が用意できたら、レイヤーパネル上部の不透明度という設定スライダを左に動かして20%くらいにします。 するとその分だけ妖精さんの存在感が薄れます。 スライダを思い通りの数値に正確に動かしたい場合はスライダ上を右ドラッグするかShift + ドラッグすると精密に動かせます。 次に下の画像のように、ペン入れレイヤーの新規作成ボタンをクリックします。 するとレイヤーパレットにペン入れ1というレイヤーが作成されて、カスタムツールトレイの中身もごっそりと切り替わったのが分かるでしょうか?このとき、レイヤーパレットのレイヤー1をクリックすれば鉛筆などが入ったカスタムツールトレイに戻ります。 つまりペン入れツールはペン入れレイヤーでしか使用できないのです。 では、レイヤーパレットのペン入れ1をクリックしてペン入れツールに切り替えて下さい 次にカスタムツールトレイの曲線ツールをクリックし、ここではブラシサイズを2.0px、色を黒にしてみました。 ではいよいよ、ペン入れを始めてみます。 まずは妖精さんの目玉(?)から描いてみましょう。 描きやすいように適当に表示を拡大して、曲線ツールで適当な位置をクリックすると線が伸びてカーソルを追います。 目玉に沿った場所でもう一度クリックすると、始点と次点が結ばれ確定します。 ちなみに間違えたら右クリックすれば戻れます。 同じ要領で目玉の外側に沿って縫うように、始点を打ったところまで描いていきます。 終点にしたい所でダブルクリック(またはEnter)すると確定されて終わります。 ここでちょっとCtrlキーを押しながら、カーソルを今引いた線の上に持ってきてみてください。 すると黄や緑の点や青い線が浮かび上がると思います。SAIではこの点を制御点と呼び、その間にある青い線分をカーブと呼びます。 そして制御点とカーブでできた一つの線をストロークと呼びます。 では制御点をCtrl + ドラッグしてみて下さい。 制御点を動かすことでストロークの形を変えることができます。 またカーブの途中からCtrl + ドラッグすることで、ドラッグ開始点に新しい制御点を作りつつストロークの形を変えることができます。 ペン入れツールがどんなものか、というのが分かってきたでしょうか? つまりこうして引いたストロークを、制御点やカーブの操作によって編集する、というのがペン入れツールの機能というわけですね。ちなみに今回は曲線ツールを使ってますが、折線ツールも同じような使い方ができます。 フリーハンドでストロークを引きたい場合はペン入れというツールを使いましょう。 制御点を増やしたり動かしたりして、形を整えてみました。 今度はカスタムツールトレイから筆圧ツールを選んで、ストロークに調子を付けてみましょう。 制御点を左右にドラッグすると、細くなったり太くなったりします。 この時表示されている%は変更後の太さ / 変更前の太さです。 筆圧ツールで調子をつけて、ようやくストロークが1本できました。 というわけで基本的な操作はこのあたりでおしまいにします。他にも修正液、線変更、色変更などのツールがありますが、この辺りは使ってみればすぐ分かると思うので説明は省きます。 制御点ツールについては次で触れます。 ペン入れツールを効率的に使う 少し触ってみた感じでは、普通に鉛筆ツールとかで描いた方が早いんじゃないか、と思うかもしれません。 ここまでの使い方だけでは実際その通りです。しかし、もう少し踏み込んで操作を覚えていくとペン入れツールの利点が分かってくると思います。 それでは上のペン入れツールのしくみの続きから始めます。必要な人はこちら fairy_of_sai.saiをクリックしてSAIファイルをダウンロードし、SAIで開いて下さい。 自分で用意した人は自分のを使ってOKです。 画像を開いたら、とりあえず曲線ツールを選んでおきます。 しくみの話では1本しかストロークを引かなかったので、次は目玉の内側の線を引いてみようと思います。 しかしまた同じ操作をするのは面倒です。 筆圧なんていちいち弄っていたら日が暮れてしまいます。 それによく見ると前に引いたストロークと、これから引く予定のストロークは形が似ています。 そんな時はShift + Ctrl + カーブをドラッグとすることで、ストロークを複製しちゃいましょう。 複製されたストロークは“選択された状態”になっているので、ここでCtrl + T(レイヤー 自由変形)を押し、このストロークのサイズを調整することにします。※自由変形は、まだ説明してない機能ですがここで覚えちゃいましょう。※“選択された状態”とはCtrlキーを押した時にストロークが赤く表示される状態のことです。 さらに、Shift + Ctrl +カーブドラッグでのストローク複製とCtrl + Tでの変形を使って、同じように黒目の部分も描いてみました。 ちなみにストロークの位置を動かしたい場合はShift + Alt カーブドラッグとします。 やっと目玉が描き終わったので、今度はその下の「へ」の部分を描いてみましょう。 1からストロークを引くのが面倒だったので、また目玉からShift + Ctrl +カーブドラッグでストロークを複製して持ってきます。 しかし今度はまったく違う形なので、自由変形ツールでは無理があります。 このような場合はストローク複製後に、そのまま新しいストロークを引きたい場所の端っこあたりに黄色い制御点を合わせます。 そうしたら、ストローク上の黄色い制御点以外の場所をShift + カーブドラッグでひっぱって「へ」のどこかに合わせます。 Ctrl + ドラッグによる制御点移動とは違った動きをすることに気づいたでしょうか?これはマクロ変形という機能です。 マクロ変形は2つのマクロ制御点(黄色い制御点)の間にある複数の制御点とカーブを同時に変形移動させる機能です。 画像ではマクロ制御点が1つしかないように見えますが、ストロークの始点と終点が重なってそう見えちゃってます。 またストロークの終始点は常にマクロ制御点となります。 良い感じの場所にストロークをマクロ変形させたら、そこで固定したいと思う制御点をShift + Alt + 制御点クリックしてマクロ制御点にします。 すると制御点が黄色くなります。 そしてまた別の箇所をShift + カーブドラッグでマクロ変形すると、上で作ったマクロ制御点が影響して変形のされ方が変わります。 これを繰り返して、制御点が足りない場合はCtrl + ドラッグなどで追加しながら、「へ」の字を作っていきます。※マクロ変形は大まかな変形、制御点の追加や移動は微妙な調整などに使うと上手くいくと思います。※不要な制御点はAlt + 制御点クリックで消せます。※マクロ制御点のON/OFFはShift + Alt + 制御点クリックです。 こうして形を整えるだけで、なんだかそれっぽく出来上がりました。 上手くできたでしょうか? さて、なんだかよく分からないショートカットキーをいくつも使いやがって覚えきれないぞと思うかもしれませんが、このページで言ってるショートカットキーのほとんどは、カスタムツールトレイにある制御点ツールの機能だったりします。なので制御点ツールに切り替えて、カスタムツールトレイの下にあるパラメータの中から好きな機能を選んで使うことも可能です。 説明していない機能もいくつかあるので、興味があれば触ってみると良いと思います。 補足 自由変形ツールだとか複製だとか、何故そんなややこしいことするの?と思うかもしれません。 しかしペン入れツールだからこそ、そうするのです。 何故なら同じことを通常のレイヤーで行おうとするとこの画像のように劣化してしまうからです。ペン入れレイヤーではストロークを変形後にプログラムが描画し直すので、常に綺麗さや線の太さなどの情報を保ちます。 そういった長所を生かすことで、より効率的な作画ができるというわけです。 カラーサークルが良い良いところとしてはマイナというかマニアックかもしれませんが、何気にSAIのカラーサークルはとても使いやすいです。 私なんかこれがなかったらSAIを使っていなかったかもしれません。というのも、通常カラーサークルの中にあるピッカーは三角形になっているソフトウェアが多いのですが、SAIの場合これが四角形になっていて、上下方向が輝度、左右方向が彩度になっており、輝度を固定したまま彩度の高い色だとか、彩度を固定したまま輝度の低い色だとかを簡単に選択できるようになっています。これが三角形の場合、例えば輝度を落とそうと思うと、同時に彩度が変動してしまい、狙った色を選びづらくなります。 そうなるともう見た目で選ぶかHSVスライダなどを表示させて調整するしかないのです。 6.レイヤーを使うへすすむ 4.基本操作編その2へもどる 0.はじめにへもどる このページ内で分かりづらい部分があれば指摘してください。 名前 コメント べっ、べつにアンタのためじゃないんだからね!(人・ω・)★ http //www.64n.co/ -- 名無し とてもわかりやすいです!!勉強になりましたm(―A―)m 《ついでに…色の塗り方など教えてくれませんか…?;; -- (*・ω・*)通りすがり 筆圧ルーツを使っても太くも細くもなりませんなぜでしょう…? -- ho2 是非続き作ってほしいです… -- 名無しさん What is customtooltrei? Where is it? -- gigi
https://w.atwiki.jp/rcap/pages/5.html
まとめサイト作成支援ツールについて @wikiにはまとめサイト作成を支援するツールがあります。 また、 #matome_list と入力することで、注目の掲示板が一覧表示されます。 利用例)#matome_listと入力すると下記のように表示されます #matome_list
https://w.atwiki.jp/wsc3kai/pages/65.html
特殊な改造ネタ ここでは分類しづらい改造ネタを掲載します。 機動波動砲 test.ini 機動波動砲 伝言板より引用 波動砲系に誘導フラグを立ててロックオンしてから撃つと移動しながら撃てる -- 名無しさん (2015-04-18 00 03 31) test.ini 伝言板より引用 メモ帳にCamDirY=17と書いてtest.iniとしてexeと同じ所に置いて出撃すると -- 名無しさん (2015-04-07 21 07 30) ↓結果 ↓比較対象として、ほぼ同じ位置での正常な視界
https://w.atwiki.jp/gbarime/pages/27.html
Advance Map 初心者の方は Advance Mapをつかって マップを改造するだけで楽しめると思いますが(´・ω・) Advance Mapの使い方は まず日本語化してください 日本語化の仕方は他のサイトなどに書いてあると思います Advance Mapを起動してから ROMを開くとあるので ROMを選び開くを押します そして時間が立つと MAP一覧表が出てきます そこから改造したい MAPを選び 右にある建物などをクリックしていき 作っていきます めんどうですが がんばってくらはい 移動エリアの設定 Advance Mapの 上の部分に マップの設定 移動エリアの設定 イベントry が、あります その中の移動エリアの設定を クリックしてください すると 色付きの文字で C、1、4 とヵがあると思います Cは普通に歩いて通れるエリアです 1が通れないエリア(壁など) 4はなみのりで通れるエリアです(間違ってるかも・・・) 基本はこれぐらいでMAP改造はできます エメラルドなどで 早く次のMAPに進みたいなどのときは そのMAPをすべてC にかえると 障害物関係なしに通れるっていうわけです イベントの設定 イベントの設定などになってくると 難しくなってくるので 詳しくは別のサイトなどをみてくれればいいです 簡単に説明すると イベントの設定では この家にはいると○○にいけるなど ワープなどの設定ができます たとえばコトキタウンの民家Aに入ったらルネシティーのポケモンセンターまでワープできるなどもできます 画像Noというのは その人の画像のことです オダマキ博士の画像Noを変えてマグマ団にできるなども可能です 出現ポケモン 次は上の部分の出現ポケモンの部分をクリックしてください この出現ポケモンの設定はそのMAPに草むらなどがなければ出現は不可能です たとえば ミシロタウンに草むらをおけば 出現ポケモンは変えれます 普通の道路のポケモンを変えたいときは 例 101番道路で出現ポケモンの部分をひらくと ケムッソ、ジグザグマ(エメラルド) などがあると思います Pokemon1 シグザグマ Pokemon2 ケムッソ などとなっていると思います Minというのは そのポケモンは最低Lvは何かです Maxは逆にそのポケモンの最高Lvです Minを100にしてMaxも100にすれば かならずそのポケモンは100Lvで出るということです 出現ポケモンの変え方は簡単です ポケモンの名前の右の下やじるしを クリックしてその表から出したいポケモンを選ぶだけです 町など 元から草むらがない場所に出す方法は まずMAPに草を置きます そして出現ポケモンのところで 野生のポケモンの追加を押します そして タイプ 草むら 水 などが出てくると思います この場合草をおいたので 草むらのところにチェックをつけOKを押します するとややこしい画面が出てくると思いますが OKというボタンがあると思うので押します するとエラー表示?みたいなのが出ると思いますが それをOKを押します そして 五個ぐらい 文字が下に出てくると思いますその中の 適当なやつをダブルクリックして Re-Pointをおしてください すると野生ポケモンの表が出てきていると思います 場所の設定 場所の設定では 自分の好きなMAPの名前を決めれたりします ホワイトムーンでゎ ミシロタウン⇒スカイタウン コトキタウン⇒ゼロタウン と なっております あとは、コトキタウンの音楽をルネシティの音楽に変えたり 天候の設定などができます 天候を霧にしたら 動きがカクカクになるので注意です 名前 コメント
https://w.atwiki.jp/6kinoko/pages/22.html
このページは「魔理沙と6つのキノコ」について、 よくある質問とその答えをまとめたページです。 よくある質問セーブはどうやってするのですか? バージョンアップのやり方がわかりません 残機がすぐなくなります 購入前の質問購入を考えていますが、このゲーム面白いですか? やりこみ要素はありますか? クリアにかかる時間はどれくらいでしょうか? 要求マシンスペックはどれくらいでしょうか? ステージ攻略に関する質問ステージにある青い水晶玉みたいなものは何? 隠し通路が見つかりません ボスの倒し方がわかりません 赤★が取れません 赤★をコンプリートすると何か特典はありますか? その他の質問タイトル画面のステージクリア数の最大値は? どれがセーブデータファイルですか? よくある質問 セーブはどうやってするのですか? 各地にある香霖堂でセーブが行えます。 セーブアイテムが入っているブロックを叩くだけでOKです。 ☆が50個必要ですが、集めるのは簡単です。 ※セーブアイテムを取得する前にタイトル画面に戻ったり、店から出てしまったりすると、セーブ情報が反映されないようです。 バージョンアップのやり方がわかりません 「黄昏フロンティア」の公式サイトへ行く → http //www.tasofro.net/ 左メニューからダウンロードページへ進み、魔理沙と6つのキノコのアップデートパッチをダウンロードする(2011/9/9現在、最新パッチver1.10)。 ダウンロードしたzipファイルを解凍する。 中にあるファイルを「魔理沙と6つのキノコ」のゲームデータがあるフォルダに上書きする。 ※ver1.00のままゲームを進行すると一部のステージや赤★が出現しないなど、攻略に関わるバグがあるので最初にアップデートパッチを当てる事をおすすめします。 残機がすぐなくなります 残機を増やすには香霖堂で☆100個と1upを交換してもらう、敵を連続で踏みつける、敵を毛玉で一気に倒す、などの方法があるが、 八頭身魔理沙の無敵状態で連続で敵を倒す方法が比較的ラクなのでおすすめ。 ■ラスボスクリア前 冥界stage4で八頭身魔理沙になって敵を倒しまくる。 連続で八頭身キノコを手に入れていく必要があるのでテクが必要だが、慣れると1回で10~20機増やすことができる。 ■ラスボスクリア後 魔理沙の家で八頭身キノコを手に入れて、魔法の森stage7でステージ開始からただ右に走る。 こちらは何も考えなくても1回で20機程度増やすことができる。 購入前の質問 購入を考えていますが、このゲーム面白いですか? 個人差があるので一概に「面白い」とは言えません。 しかし昔FCやSFCのマリオシリーズをやりこんだ人なら、操作方法は直感で分かりますし、謎解きも直感で分かるようにできています。 初めてやるゲームなのに、どこか「懐かしさ」を感じて楽しむことができると思います。 ただ難易度はマリオシリーズよりちょっとむずかしめです。 やりこみ要素はありますか? 通常クリアに加えて、各ステージの赤★を10個集めるという要素があります。 さらにver1.10から赤★をコンプリートすると難しいExtraステージが出現するようになりました。 Extraステージを全てクリアすると、うれしいごほうびがあります。 またプレイ時間も記録されるので、クリアまでのタイムアタックを楽しむ人もいるようです。 クリアにかかる時間はどれくらいでしょうか? プレイヤーの腕前にもよりますが、初回クリアに5~10時間、全ゴール&赤★コンプリート目指すならその倍くらいかと思います。 要求マシンスペックはどれくらいでしょうか? 動作環境目安(公式サイトより引用) OS WindowsXP ・ Vista ・ 7 CPU 2GHz以上 メモリ 512MB以上 グラフィック DirectX9.0cに対応したVRAM128MB以上のビデオカード インストール容量 約200MB マシンスペックが低いと特定のステージで処理が遅い、背景が描画されないなどの不具合が出るようです。 ステージ攻略に関する質問 ステージにある青い水晶玉みたいなものは何? マリオシリーズでいう「Pスイッチ」です。 上から踏む事で作動し、ステージ上になんらかの変化が起きます。 青い隠し☆が出現したり、隠し扉が出現したり、攻略の鍵となるケースが多いです。 隠し通路が見つかりません 隠し通路のある壁や天井に入ると、内部が見えるようになります(ヨッシーアイランドと同じです)。 妙なくぼみのある壁などに多いので、怪しい所はくまなく探してみましょう。 霊夢衣装の陰陽玉、蹴り飛ばした毛玉は反射せず通路へ消えるので発見に役立ちます。 ボスの倒し方がわかりません 大抵のボスは「上から踏みつける」、もしくは霊夢衣装の「陰陽弾を当てる」ことでダメージを与えられますが、一部のボスには通用しない事もあります。 詳しくは該当ステージの攻略記事を参照してください。 赤★が取れません 高い所にある赤★ → 天子衣装で足場を作ってから、鈴仙衣装でジャンプ+ホバリングすればかなり高く跳ぶことができます。 水中にある赤★ → 諏訪子衣装なら水中での操作性が格段に上がります。 詳しくは該当ステージの攻略記事を参照してください。 動画サイトで検索すれば全ての赤★取得を解説している動画もあります。 赤★をコンプリートすると何か特典はありますか? ワールドマップのポーズメニューにメッセージが追加されます。 →ver1.10からステージ内の赤★をコンプリートすると、Extraステージが出現するようになりました。さらに出現した全てのExtraステージ+αをクリアすると、ごほうび画像を見ることができます。 その他の質問 タイトル画面のステージクリア数の最大値は? ver1.10では最大で64です(ver1.02までは55)。 またこの数字はステージクリア数であってクリア率ではありません。 どれがセーブデータファイルですか? 「魔理沙と6つのキノコ」のゲームデータが入っているフォルダの 「marisaA.dat」「marisaB.dat」「marisaC.dat」ファイルがそれぞれタイトル画面の 「まりさA」「まりさB」「まりさC」のセーブデータに対応しています。 また、ファイル名をリネームすることでセーブデータのコピーを行う事ができます。 (「marisaA.dat」ファイルを「marisaB.dat」とリネームすると、まりさAのデータをまりさBで遊べる)
https://w.atwiki.jp/skyrim_mod/pages/77.html
目的 前提 手順概要 手順詳細 SKSESerializationInterfaceのインスタンス化 セーブ/ロード時のコールバック関数の作成と登録 セーブ用関数の実装 ロード用関数の実装 セーブ/ロードの確認 Tips セーブ/ロードするデータの順序 セーブ/ロードするデータの型について LE版Skyrimでの実装について 目的 SKSEプラグインを用いてデータの保存を行えるサンプルを提供します。 SKSEプラグイン上で処理するデータは、静的変数を用いればゲーム中は値を保持し続けますが、ゲーム終了時にはすべて破棄されます。 このため本来はPapyrusスクリプトでデータを保存する(Tips参照)必要がありますが、このページのサンプルによりSKSEプラグイン上でデータの保存が可能となり、Papyrus上の変数などに戻すような手間が不要になります。 前提 SKSE64プラグイン開発環境構築手順にて、skse 本体のコンパイルができる状態にあることが前提となります。 プラグインのサンプルプロジェクトである samplePlugin を元にデータのセーブ/ロードを実装します。 手順概要 データの保存のために、SKSESelrializationInterfaceクラスが提供されています。これを利用してデータのセーブ/ロードを実現します。 以下の手順によって実装します。 SKSESerizalizationIntarfaceのインスタンス化 自分のSKSEプラグインでSKSESerializationInterfaceを利用できるようにします。 セーブ/ロード時のコールバック関数の作成と登録 セーブ時及びロード時に動作させる関数を作成し、実際に呼び出されるよう登録します。 セーブ用関数の実装 SKSEプラグイン内の変数の値を保存する処理を実装します。 ロード用関数の実装 SKSEプラグイン内の変数へ値を読み込ませる処理を実装します。 セーブ/ロードの確認 skse64_loader.exeからSKYRIMを起動し、セーブ/ロードが行われていることを確認します。 手順詳細 以下の手順はすべてsamplePluginプロジェクトのmain.cppに対して行います。 SKSESerializationInterfaceのインスタンス化 グローバル変数としてSKSESerializationInterfaceのポインタを作成します。 IDebugLoggLog; UInt32 g_skseVersion; PluginHandleg_pluginHandle = kPluginHandle_Invalid; SKSEMessagingInterface* g_messaging = nullptr; //*************SKSESerializationIntarfaceポインタ作成************* SKSESerializationInterface* g_serialization = NULL; void SKSEMessageHandler(SKSEMessagingInterface Message* msg) // ...以下省略... 宣言したg_serialization変数をSKSEPlugin_Query関数の実行時にインスタンス化させます。 extern "C" { bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info) // ...前半省略... g_messaging = (SKSEMessagingInterface *)skse- QueryInterface(kInterface_Messaging); if (!g_messaging) { return false; } /*************追加部分*************/ // get the serialization interface and query its version g_serialization = (SKSESerializationInterface *)skse- QueryInterface(kInterface_Serialization); if (!g_serialization) { _MESSAGE("couldn t get serialization interface"); return false; } if (g_serialization- version SKSESerializationInterface kVersion) { _MESSAGE("serialization interface too old (%d expected %d)", g_serialization- version, SKSESerializationInterface kVersion); return false; } /*************追加部分*************/ return true; } セーブ/ロード時のコールバック関数の作成と登録 セーブ/ロード時に実行させるための関数を記述します。 void Serialization_Save(SKSESerializationInterface * intfc) { } void Serialization_Load(SKSESerializationInterface * intfc) { } extern C { // ...以下省略... 上記二つの関数を、SKSESerializationInterface(g_seriarization変数)に登録し、実際にセーブやロードを実行した際に呼び出されるようにします。 この処理は SKSEPlugin_Load内に実装します。 ここで最初に実行しているSetUniqueIDメソッドですが、第二引数の文字列がプラグインの識別子として動作し、異なるSKSEプラグイン間でのデータの誤ったロードを防ぐようになっていると思われます(未確認) サンプルでは TEST としていますが、自作のMODで実装する際は異なる単語にした方が良いです。 bool SKSEPlugin_Load(const SKSEInterface * skse) { if (g_messaging) { g_messaging- RegisterListener(g_pluginHandle, "SKSE", SKSEMessageHandler); } /*************追加部分*************/ // ### this must be a UNIQUE ID, change this and email me the ID so I can let you know if someone else has already taken it g_serialization- SetUniqueID(g_pluginHandle, TEST ); g_serialization- SetSaveCallback(g_pluginHandle, Serialization_Save); g_serialization- SetLoadCallback(g_pluginHandle, Serialization_Load); /*************追加部分*************/ return true; } セーブ用関数の実装 セーブ用関数Serialization_Save上でセーブ処理を実装します。 セーブ処理には引数として受け取るintfcの、以下の2つのメソッドを利用します。 OpenRecord SKSEプラグイン内で保存するデータの住み分けやプラグイン更新時に古いデータを読み込まないようバージョン管理を行う WriteRecordData 変数に格納されたデータを実際に保存する 実装サンプルは以下のようになります。ここではtestInt変数内の「64」という数字を保存しています。 const UInt32 kSerializationDataVersion = 1; // グローバルで宣言 void Serialization_Save(SKSESerializationInterface * intfc) { _MESSAGE("save"); SInt32 testInt = 64; if (intfc- OpenRecord( DATA , kSerializationDataVersion)) { intfc- WriteRecordData( testInt, sizeof(testInt)); _MESSAGE("save DATA... int %ld", testInt); } } OpenRecordメソッドは、以降にWriteRecordDataにより保存するデータに対して識別子とバージョン情報を付与します。 第一引数 識別子。文字列を登録する。 第二引数 バージョン情報。ロード時にも用いるためグローバル変数を利用することを推奨。 WriteRecordDataメソッドにより、変数内の値を保存します。 第一引数 保存する値を格納した変数のポインタ 第二引数 第一引数の変数のサイズ ロード用関数の実装 ロード用関数Serialization_Load上でロード処理を実装します。 ロード処理には引数として受け取るintfcの、以下の2つのメソッドを利用します。 GetNextRecordInfo 保存時のOpenRecordメソッドで設定したパラメータを引き出す ReadRecordData 保存されているデータを読み込んで変数に格納する 実装サンプルは以下のようになります。ここではtestInt変数に保存した値を読み込んでいます。 void Serialization_Load(SKSESerializationInterface * intfc) { _MESSAGE("load"); UInt32type; UInt32version; UInt32length; boolerror = false; while (!error intfc- GetNextRecordInfo( type, version, length)) { switch (type) { case DATA { if (version == kSerializationDataVersion) { SInt32 testInt; if (!intfc- ReadRecordData( testInt, sizeof(testInt))) { error = true; return; } _MESSAGE("read DATA... int %ld", testInt); } else { error = true; } } break; default _MESSAGE("unhandled type %08X", type); error = true; break; } } } GetNextRecordInfoメソッドは、OpenRecordメソッドで付与した情報を引き出して引数に格納します。 第一引数 識別子の値を引数に格納します。このサンプルでは「DATA」になります。 第二引数 バージョン情報の値を引数に格納します。このサンプルでは「1」になります。 第三引数 登録したデータのサイズを取得できるようです。ReadRecordDataメソッドの第二引数にここの変数を入れても使えますが、複数のデータの保存には対応できないので使用していません(セーブ/ロードするデータの順序参照) type変数の中に格納された識別子をチェックし、対応を変えます。複数の識別子をセーブ時に登録していた場合、GetNextRecordInfoを繰り返すたびに次の識別子(とそこで保存したデータ)を読み込めるようになります。 ReadRecordDataメソッドにより、変数内の値を保存します。 第一引数 保存された値を格納するための引数のポインタ 第二引数 第一引数の変数のサイズ セーブ/ロードの確認 ビルドを行い、samplePlugin.dllを作成します。 Skyrim Special Edition\Data\SKSE\pluginsに上記ファイルを保存し、skse64_loader.exeからSkyrimを起動します。 プレイを開始した後、保存してセーブデータを作成して終了します。 (デフォルトの場合)My Games\Skyrim Special Edition\SKSEにsamplePlugin.logが作成されるので、以下の内容が記載されていることを確認します。 samplePlugin.dll save save DATA... int 64 再度Skyrimを起動し、保存したセーブデータをロードします。 先ほどのsamplePlugin.logが更新されるので、以下の内容が記載されていることを確認します。 3行目のところで、データが正常にセーブ/ロードされていることが分かります。 samplePlugin.dll load read DATA... int 64 Tips セーブ/ロードするデータの順序 WriteRecordDataやReadRecordDataは、連続して使うことで別のデータをセーブ/ロードできます。 ただし、セーブした順序と同じ順序でロードするので、セーブの順序とロードの順序は一貫性を持たせなければなりません。 以下が複数のデータのセーブ/ロードを行うサンプルです。 void Serialization_Save(SKSESerializationInterface * intfc) { _MESSAGE("save"); SInt32 testInt = 64; UInt32 testInt2 = 32; if (intfc- OpenRecord( DATA , kSerializationDataVersion)) { intfc- WriteRecordData( testInt, sizeof(testInt)); intfc- WriteRecordData( testInt2, sizeof(testInt2)); _MESSAGE("save DATA... int %ld uint %lu", testInt, testInt2); } } void Serialization_Load(SKSESerializationInterface * intfc) { _MESSAGE("load"); UInt32type; UInt32version; UInt32length; boolerror = false; while (!error intfc- GetNextRecordInfo( type, version, length)) { switch (type) { case DATA { if (version == kSerializationDataVersion) { SInt32 testInt; UInt32 testInt2; if (!intfc- ReadRecordData( testInt, sizeof(testInt))) { error = true; return; } if (!intfc- ReadRecordData( testInt2, sizeof(testInt2))) { error = true; return; } _MESSAGE("read DATA... int %ld uint %lu", testInt, testInt2); } else { error = true; } } break; default _MESSAGE("unhandled type %08X", type); error = true; break; } } } セーブ/ロードするデータの型について WriteRecordData/ReadRecordDataでセーブ/ロードを行うことのできるデータはプリミティブ型(bool、int、float、charなど)に限られます。 そのため文字列データや配列データをそのままセーブ/ロードすることはできず、プリミティブ型に落とし込む必要があります(SInt32やUInt16などのプリミティブ型をtypedefで別名にしたものはそのまま利用可能)。 この時、「ロード時に文字列の長さや配列の長さが分からない」ことが問題になります。 文字列や配列をセーブ/ロードする場合は、直前にその文字の長さや配列の長さを一緒に保存することでこの問題を回避できます。 以下が文字列や配列をセーブ/ロードするための関数サンプルです。 void Serialization_Save(SKSESerializationInterface * intfc) { _MESSAGE("save"); std vector float testArray{ 1.5f, 2.9f, 4.3f }; std string testStr = "skse64"; if (intfc- OpenRecord( DATA , kSerializationDataVersion)) { //配列のセーブ SInt32 arrayLen = testArray.size(); intfc- WriteRecordData( arrayLen, sizeof(arrayLen)); //先に配列のサイズを保存 for (int i = 0; i testArray.size(); i++) intfc- WriteRecordData( testArray[i], sizeof(testArray[i])); //文字列のセーブ SInt32 strLen = strlen(testStr.c_str()); intfc- WriteRecordData( strLen, sizeof(strLen)); //先に文字の長さを保存 intfc- WriteRecordData(testStr.c_str(), strLen); } } void Serialization_Load(SKSESerializationInterface * intfc) { _MESSAGE("load"); UInt32type; UInt32version; UInt32length; boolerror = false; while (!error intfc- GetNextRecordInfo( type, version, length)) { switch (type) { case DATA { if (version == kSerializationDataVersion) { //配列のロード SInt32 arrayLen; intfc- ReadRecordData( arrayLen, sizeof(arrayLen)); //配列のサイズを取得 std vector float testArray; for (int i = 0; i arrayLen; i++) { float bufFloat; intfc- ReadRecordData( bufFloat, sizeof(bufFloat)); testArray.push_back(bufFloat); _MESSAGE("read TEST... floatArray[%d] %f", i, testArray[i]); } //文字列のロード SInt32 strLen; intfc- ReadRecordData( strLen, sizeof(strLen)); //文字の長さを取得 char *bufChar = new char[strLen + 1]; intfc- ReadRecordData(bufChar, strLen); bufChar[strLen] = \0 ; std string testStr(bufChar); delete[] bufChar; _MESSAGE("read TEST... string %s", testStr); } else { error = true; } } break; default _MESSAGE("unhandled type %08X", type); error = true; break; } } } LE版Skyrimでの実装について LE版のSkyrimの場合、skse1.7.3のplugin_exampleプロジェクト内でSerialization_Save/Serialization_Load関数がすでに実装されています。 そのため、前提条件におけるsamplePluginは用いず、skse1.7.3のソースだけで利用できます。また、手順1及び2は不要になります。
https://w.atwiki.jp/gtavc/pages/23.html
timecyc.dat 解説 このファイルによって、天候ごとの環境光やドローディスタンス等が定義されています。 timecyc.dat内で///によって区切られている各天候は SUNNY = 晴れ CLOUDY = 曇り RAINY(何故か2つ存在) = 雨 FOGGY = 濃霧 EXTRASUNNY = 雲ひとつない晴れ EXTRACOLOURS = 室内等特殊なMapでの環境 となっています。 Amb RGB値 道路や建物に当たる環境光の色 Amb_Obj RGB値 Ped、車両等に当たる環境光 Amb_bl RGB値 ? Amb_Obj_bl RGB値 ? Dir RGB値 太陽に重なっている雲の色? Sky top RGB値 空の上の方の色 Sky bot RGB値 空の下の方の色 SunCore RGB値 太陽の中心の色 SunCorona RGB値 太陽の外周に出るコロナの色 SunSz 0.0~15.0程度 太陽の大きさ 数値を大きくしすぎても反映されない SprSz 0.0~? ? SprBght 0.0~? ? Shdw 0~255 Pedや車両の影の濃さ 数値が高い程濃い LightShd 0~255 Pedや車両の影の濃さ 数値が高い程濃い PoleShd 0~255 街灯等の影の濃さ 数値が高い程濃い FarClp 0.0~? ドローディスタンスの長さ 数値が高い程長い FogSt ? 霧の濃さ 数値が低い程濃い LightOnGround 0.0~? 地面に当たる街灯の光の強さ 数値が高い程強い LowCloudsRGB RGB値 空の低い位置の雲の色 TopCloudRGB RGB値 空の高い位置の雲の色 BottomCloudRGB RGB値 空の下の方(遠くにある?)の雲の色 BlurRGB RGB値 ? WaterRGBA RGB値0~255 海の色と色の濃さ 濃さは数値が高いほど濃い ※空や雲、水の色は、RGBでどんな色にも設定できるので、 うまくやれば冬空、黄砂、はては毒で汚染されたような天候も作ることが出来ます。 また、夜間にPed等に当たる環境光を赤や黄色などにすれば、SAのナイトビジョンゴーグル のような効果も作れたりするかも知れません。